Opi luomaan mukautettuja estimatoreita scikit-learnissa laajentaaksesi sen toiminnallisuutta ja toteuttaaksesi omia koneoppimisalgoritmejasi. Tämä opas kattaa kaiken perusteista edistyneisiin tekniikoihin.
Python Scikit-learn Mukautetut Estimatorit: Kattava Opas Algoritmien Toteutukseen
Scikit-learn on tehokas ja laajalti käytetty Python-kirjasto koneoppimiseen. Vaikka se tarjoaa laajan kokoelman valmiita algoritmeja, on tilanteita, joissa sinun on toteutettava omia mukautettuja algoritmejasi. Onneksi scikit-learn tarjoaa joustavan kehyksen mukautettujen estimatoreiden luomiseen, mikä mahdollistaa algoritmien saumattoman integroinnin scikit-learn-ekosysteemiin. Tämä kattava opas opastaa sinut mukautettujen estimatoreiden rakentamisprosessissa, perusteiden ymmärtämisestä edistyneiden tekniikoiden toteuttamiseen. Tutustumme myös tosielämän esimerkkeihin havainnollistaaksemme mukautettujen estimatoreiden käytännön sovelluksia.
Miksi Luoda Mukautettuja Estimatoreita?
Ennen kuin sukellamme toteutuksen yksityiskohtiin, ymmärretään, miksi haluat ehkä luoda mukautettuja estimatoreita:
- Toteuta Uusia Algoritmeja: Scikit-learn ei kata kaikkia mahdollisia koneoppimisalgoritmeja. Jos olet kehittänyt uuden algoritmin tai haluat toteuttaa tutkimuspaperin, mukautetun estimatorin luominen on oikea tapa.
- Mukauta Olemassa Olevia Algoritmeja: Haluat ehkä muokata olemassa olevaa scikit-learn-algoritmia, jotta se sopisi paremmin erityistarpeisiisi. Mukautettujen estimatoreiden avulla voit laajentaa tai mukauttaa olemassa olevaa toiminnallisuutta.
- Integroi Ulkoisten Kirjastojen Kanssa: Haluat ehkä käyttää algoritmeja muista Python-kirjastoista, jotka eivät ole suoraan yhteensopivia scikit-learnin kanssa. Mukautetut estimatorit tarjoavat sillan näiden kirjastojen ja scikit-learnin API:n välille.
- Paranna Koodin Uudelleenkäytettävyyttä: Kapseloimalla algoritmisi mukautettuun estimatoriin, voit helposti käyttää sitä uudelleen eri projekteissa ja jakaa sen muiden kanssa.
- Paranna Pipeline-integraatiota: Mukautetut estimatorit integroituvat saumattomasti scikit-learnin pipelineihin, mikä mahdollistaa monimutkaisten koneoppimistyönkulkujen rakentamisen.
Scikit-learn-estimatoreiden Perusteiden Ymmärtäminen
Pohjimmiltaan scikit-learn-estimatori on Python-luokka, joka toteuttaa fit- ja predict-menetelmät (ja joskus muita menetelmiä, kuten transform tai fit_transform). Nämä menetelmät määrittelevät estimatorin käyttäytymisen harjoittelun ja ennustamisen aikana. On olemassa kahdenlaisia estimatoreita:
- Muuntajat: Nämä estimatorit muuntavat dataa muodosta toiseen. Esimerkkejä ovat
StandardScaler,PCAjaOneHotEncoder. Ne toteuttavat tyypillisestifit- jatransform-menetelmät. - Mallit (Ennustajat): Nämä estimatorit oppivat mallin datasta ja käyttävät sitä ennusteiden tekemiseen. Esimerkkejä ovat
LinearRegression,DecisionTreeClassifierjaKMeans. Ne toteuttavat tyypillisestifit- japredict-menetelmät.
Molemmat estimatortyypit jakavat yhteisen API:n, jonka avulla voit käyttää niitä keskenään vaihdettavissa pipelineissa ja muissa scikit-learn-työkaluissa.
Yksinkertaisen Mukautetun Muuntajan Luominen
Aloitetaan yksinkertaisella esimerkillä mukautetusta muuntajasta. Tämä muuntaja skaalaa jokaisen ominaisuuden vakiokertoimella. Tämä muuntaja on samanlainen kuin `StandardScaler`, mutta yksinkertaisempi ja mahdollistaa mukautetun skaalauskertoimen määrittämisen.
from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np
class FeatureScaler(BaseEstimator, TransformerMixin):
def __init__(self, factor=1.0):
self.factor = factor
def fit(self, X, y=None):
# No fitting needed for this transformer
return self
def transform(self, X):
return X * self.factor
Tässä on koodin erittely:
- Perintä: Perimme luokista
BaseEstimatorjaTransformerMixin.BaseEstimatortarjoaa perustoimintoja, kutenget_paramsjaset_params, kun taasTransformerMixintarjoaa oletustoteutuksenfit_transform-menetelmälle (joka kutsuu ensinfit- ja sittentransform-menetelmää). __init__: Tämä on konstruktori. Se ottaa skaalauskertoimen argumenttina ja tallentaa senself.factor-attribuuttiin. On tärkeää määritellä estimatorin parametrit konstruktorissa.fit: Tätä menetelmää kutsutaan muuntajan sovittamiseksi dataan. Tässä tapauksessa meidän ei tarvitse oppia mitään datasta, joten palautamme yksinkertaisestiself.y-argumenttia ei usein käytetä muuntajille, mutta se vaaditaan yhteensopivuuden vuoksi scikit-learn-API:n kanssa.transform: Tätä menetelmää kutsutaan datan muuntamiseksi. Kerromme yksinkertaisesti jokaisen ominaisuuden skaalauskertoimella.
Katsotaanpa nyt, miten tätä mukautettua muuntajaa käytetään:
# Example Usage
from sklearn.pipeline import Pipeline
X = np.array([[1, 2], [3, 4], [5, 6]])
# Create a FeatureScaler with a factor of 2
scaler = FeatureScaler(factor=2.0)
# Transform the data
X_transformed = scaler.transform(X)
print(X_transformed)
# Output:
# [[ 2. 4.]
# [ 6. 8.]
# [10. 12.]]
# Using in a pipeline
pipe = Pipeline([('scaler', FeatureScaler(factor=3.0))])
X_transformed_pipeline = pipe.fit_transform(X)
print(X_transformed_pipeline)
# Output:
# [[ 3. 6.]
# [ 9. 12.]
# [15. 18.]]
Yksinkertaisen Mukautetun Mallin (Ennustajan) Luominen
Seuraavaksi luodaan yksinkertainen mukautettu malli. Tämä malli ennustaa harjoitusdatan keskiarvon kaikille tuleville ennusteille. Vaikka tämä ei olekaan erityisen hyödyllinen, se osoittaa mukautetun ennustajan perusrakenteen.
from sklearn.base import BaseEstimator, RegressorMixin
import numpy as np
class MeanPredictor(BaseEstimator, RegressorMixin):
def __init__(self):
self.mean_ = None
def fit(self, X, y):
self.mean_ = np.mean(y)
return self
def predict(self, X):
return np.full(X.shape[0], self.mean_)
Tässä on koodin erittely:
- Perintä: Perimme luokista
BaseEstimatorjaRegressorMixin.RegressorMixintarjoaa oletustoteutukset regressioon liittyville menetelmille (vaikka emme käytä niitä tässä esimerkissä). __init__: Alustammeself.mean_arvoonNone. Tämä attribuutti tallentaa kohdemuuttujan keskiarvon sovittamisen jälkeen.fit: Tämä menetelmä laskee kohdemuuttujanykeskiarvon ja tallentaa senself.mean_-attribuuttiin.predict: Tämä menetelmä palauttaa taulukon, jonka pituus on sama kuin syötteenX, ja jokainen elementti on yhtä suuri kuin tallennettu keskiarvo.
Katsotaanpa nyt, miten tätä mukautettua mallia käytetään:
# Example Usage
X = np.array([[1], [2], [3]])
y = np.array([10, 20, 30])
# Create a MeanPredictor
predictor = MeanPredictor()
# Fit the model
predictor.fit(X, y)
# Predict on new data
X_new = np.array([[4], [5], [6]])
y_pred = predictor.predict(X_new)
print(y_pred)
# Output:
# [20. 20. 20.]
Parametrien Validioinnin Toteuttaminen
On erittäin tärkeää validioida mukautetuille estimatoreillesi välitetyt parametrit. Tämä auttaa estämään odottamatonta käyttäytymistä ja tarjoaa informatiivisia virheilmoituksia käyttäjille. Voit käyttää check_estimator-funktiota sklearn.utils.estimator_checks-moduulista testataksesi automaattisesti estimatoriasi yleisiä tarkistuksia vastaan.
Muokataan ensin FeatureScaler-luokkaa sisällyttämään parametrien validiointi:
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.utils import validation
class FeatureScaler(BaseEstimator, TransformerMixin):
def __init__(self, factor=1.0):
self.factor = factor
def fit(self, X, y=None):
# Validate the input
self.factor = validation.check_scalar(
self.factor,
'factor',
target_type=float,
min_val=0.0,
include_boundaries=True
)
return self
def transform(self, X):
validation.check_is_fitted(self)
X = validation.check_array(X)
return X * self.factor
Tässä on mitä olemme lisänneet:
validation.check_scalar: Käytämme tätä funktiotafit-menetelmässä validoidaksemme, ettäfactor-parametri on liukuluku, joka on suurempi tai yhtä suuri kuin 0.validation.check_is_fitted: Käytämme tätä funktiota `transform`-menetelmässä varmistaaksemme, että estimatori on sovitettu ennen datan muuntamista.validation.check_array: Käytämme tätä funktiota validoidaksemme, että syöte `X` on kelvollinen taulukko.
Testataan nyt estimatoriamme check_estimator-funktiolla:
from sklearn.utils.estimator_checks import check_estimator
# Perform checks
check_estimator(FeatureScaler)
Jos estimatorissasi on ongelmia (esim. virheelliset parametrien tyypit tai puuttuvat menetelmät), check_estimator aiheuttaa virheen. Tämä on tehokas työkalu sen varmistamiseksi, että mukautetut estimatorisi noudattavat scikit-learn-API:a.
Hyperparametrien Käsittely GridSearchCV:n Kanssa
Yksi mukautettujen estimatoreiden luomisen tärkeimmistä eduista on, että voit käyttää niitä scikit-learnin hyperparametrien viritystyökalujen, kuten GridSearchCV:n ja RandomizedSearchCV:n kanssa. Jotta estimatorisi olisi yhteensopiva näiden työkalujen kanssa, sinun on varmistettava, että sen parametrit ovat käytettävissä ja muokattavissa. Tämä hoidetaan tyypillisesti automaattisesti `BaseEstimator`-luokan ansiosta.
Esitellään tämä FeatureScaler-luokan avulla. Käytämme GridSearchCV:tä löytääksemme optimaalisen skaalauskertoimen:
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
import numpy as np
# Create a pipeline with the FeatureScaler
pipe = Pipeline([('scaler', FeatureScaler())])
# Define the parameter grid
param_grid = {'scaler__factor': [0.5, 1.0, 1.5, 2.0]}
# Create a GridSearchCV object
grid_search = GridSearchCV(pipe, param_grid, cv=3, scoring='r2') # Using R^2 as an example scoring metric.
# Generate some sample data
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
y = np.array([2, 4, 6, 8, 10])
# Fit the grid search
grid_search.fit(X, y)
# Print the best parameters and score
print("Best parameters:", grid_search.best_params_)
print("Best score:", grid_search.best_score_)
Tässä esimerkissä määritämme parametriverkon, joka määrittää factor-parametrin arvot, joita haetaan. GridSearchCV arvioi sitten pipelinen jokaisella parametriyhdistelmällä ja palauttaa parhaiten toimivan joukon. Huomaa nimeämiskäytäntö `scaler__factor` parametrien käyttämiseksi pipelinen vaiheessa.
Edistyneet Tekniikat: Monimutkaisten Datatyyppien ja Puuttuvien Arvojen Käsittely
Mukautettuja estimatoreita voidaan käyttää myös monimutkaisten datatyyppien ja puuttuvien arvojen käsittelyyn. Haluat ehkä esimerkiksi luoda muuntajan, joka korvaa puuttuvat arvot toimialakohtaisella strategialla tai joka muuntaa luokitteluominaisuudet numeerisiksi esityksiksi. Avainasemassa on datasi erityisvaatimusten huolellinen harkitseminen ja asianmukaisen logiikan toteuttaminen fit- ja transform-menetelmissä.
Tarkastellaan esimerkkiä mukautetusta muuntajasta, joka korvaa puuttuvat arvot mediaanilla:
from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np
class MedianImputer(BaseEstimator, TransformerMixin):
def __init__(self):
self.median_ = None
def fit(self, X, y=None):
# Calculate the median for each column
self.median_ = np.nanmedian(X, axis=0)
return self
def transform(self, X):
# Impute missing values with the median
X_imputed = np.where(np.isnan(X), self.median_, X)
return X_imputed
Tässä esimerkissä fit-menetelmä laskee jokaisen syöttödatan sarakkeen mediaanin jättäen huomioimatta puuttuvat arvot (np.nan). transform-menetelmä korvaa sitten kaikki syöttödatan puuttuvat arvot vastaavalla mediaanilla.
Näin sitä käytetään:
# Example Usage
X = np.array([[1, 2, np.nan], [3, np.nan, 5], [np.nan, 4, 6]])
# Create a MedianImputer
imputer = MedianImputer()
# Fit the imputer
imputer.fit(X)
# Transform the data
X_imputed = imputer.transform(X)
print(X_imputed)
# Output:
# [[1. 2. 5.5]
# [3. 4. 5. ]
# [2. 4. 6. ]]
Tosielämän Esimerkkejä ja Käyttötapauksia
Tutkitaan joitain tosielämän esimerkkejä, joissa mukautetut estimatorit voivat olla erityisen hyödyllisiä:
- Aikasarjaominaisuuksien Suunnittelu: Haluat ehkä luoda mukautetun muuntajan, joka poimii ominaisuuksia aikasarjadatasta, kuten liukuvia tilastoja tai viivästyneitä arvoja. Esimerkiksi rahoitusmarkkinoilla voit luoda estimatorin, joka laskee osakekurssien liukuvan keskiarvon ja keskihajon tietyn ikkunan yli. Tätä estimatoria voidaan sitten käyttää pipelinessa tulevien osakekurssien ennustamiseen. Ikkunan koko voi olla hyperparametri, jota `GridSearchCV` virittää.
- Luonnollinen Kielenkäsittely (NLP): Voit luoda mukautetun muuntajan, joka suorittaa tekstin puhdistamisen tai ominaisuuksien poiminnan käyttämällä tekniikoita, jotka eivät ole suoraan saatavilla scikit-learnissa. Haluat ehkä esimerkiksi toteuttaa mukautetun stammerin tai lemmatisaattorin, joka on räätälöity tietylle kielelle tai toimialueelle. Voit myös integroida ulkoisia kirjastoja, kuten NLTK tai spaCy, mukautettuun estimatoriin.
- Kuvankäsittely: Haluat ehkä luoda mukautetun muuntajan, joka soveltaa tiettyjä kuvankäsittelytoimintoja, kuten suodatusta tai reunantunnistusta, ennen kuin syötät kuvat koneoppimismalliin. Tämä voi sisältää integroinnin kirjastojen, kuten OpenCV tai scikit-image, kanssa. Esimerkiksi estimatori voi normalisoida lääketieteellisten kuvien kirkkauden ja kontrastin ennen mallin kouluttamista kasvainten havaitsemiseksi.
- Suositusjärjestelmät: Voit luoda mukautetun estimatorin, joka toteuttaa yhteistyösuodatusalgoritmeja, kuten matriisifaktorointia, henkilökohtaisten suositusten luomiseksi. Tämä voi sisältää integroinnin kirjastojen, kuten Surprise tai implicit, kanssa. Esimerkiksi elokuvien suositusjärjestelmä voi käyttää mukautettua estimatoria ennustaakseen käyttäjien arvioita heidän aiempien mieltymystensä ja muiden käyttäjien arvioiden perusteella.
- Paikkatietoanalyysi: Luo mukautettuja muuntajia sijaintitiedon kanssa työskentelyyn. Tämä voi sisältää pisteiden välisten etäisyyksien laskemisen, paikkatietoliitosten suorittamisen tai ominaisuuksien poiminnan maantieteellisistä muodoista. Voit esimerkiksi laskea jokaisen asiakkaan etäisyyden lähimpään myymälän sijaintiin markkinointistrategioiden tiedottamiseksi.
Parhaat Käytännöt Mukautettujen Estimatoreiden Luomiseen
Varmistaaksesi, että mukautetut estimatorisi ovat vankkoja, ylläpidettäviä ja yhteensopivia scikit-learnin kanssa, noudata näitä parhaita käytäntöjä:- Peri luokista
BaseEstimatorja asianmukaisesta Mixin-luokasta: Tämä tarjoaa perustoimintoja ja varmistaa yhteensopivuuden scikit-learnin API:n kanssa. - Toteuta
__init__,fitjatransform(taipredict): Nämä menetelmät ovat estimatorisi ydin. - Validioi Syöttöparametrit: Käytä
sklearn.utils.validation-moduulia estimatorillesi välitettyjen parametrien validoimiseksi. - Käsittele Puuttuvat Arvot Asianmukaisesti: Päätä, miten estimatorisi tulisi käsitellä puuttuvia arvoja ja toteuta asianmukainen logiikka.
- Dokumentoi Koodisi: Tarjoa selkeä ja ytimekäs dokumentaatio estimatorillesi, mukaan lukien sen tarkoitus, parametrit ja käyttö. Käytä docstringejä, jotka noudattavat NumPy/SciPy-käytäntöjä yhdenmukaisuuden vuoksi.
- Testaa Koodisi: Käytä
sklearn.utils.estimator_checks-moduulia testataksesi estimatoriasi yleisiä tarkistuksia vastaan. Kirjoita myös yksikkötestejä varmistaaksesi, että estimatorisi toimii oikein. - Noudata Scikit-learnin Käytäntöjä: Noudata scikit-learnin koodaustyyliä ja API-käytäntöjä yhdenmukaisuuden ja ylläpidettävyyden varmistamiseksi.
- Harkitse Koristeiden Käyttöä: Kun se on tarkoituksenmukaista, käytä koristeita, kuten `@validate_arguments` kirjastoista, kuten `typing-extensions`, parametrien validoinnin yksinkertaistamiseksi.
Johtopäätös
Mukautettujen estimatoreiden luominen scikit-learnissa mahdollistaa sen toiminnallisuuden laajentamisen ja omien koneoppimisalgoritmien toteuttamisen. Noudattamalla tässä oppaassa esitettyjä ohjeita ja parhaita käytäntöjä voit luoda vankkoja, ylläpidettäviä ja uudelleenkäytettäviä estimatoreita, jotka integroituvat saumattomasti scikit-learn-ekosysteemiin. Olitpa toteuttamassa uusia algoritmeja, mukauttamassa olemassa olevia tai integroimassa ulkoisten kirjastojen kanssa, mukautetut estimatorit tarjoavat tehokkaan työkalun monimutkaisten koneoppimisongelmien ratkaisemiseen.Muista testata ja dokumentoida mukautetut estimatorisi perusteellisesti niiden laadun ja käytettävyyden varmistamiseksi. Hyvällä scikit-learn-API:n ymmärryksellä ja hieman luovuutta voit hyödyntää mukautettuja estimatoreita rakentaaksesi kehittyneitä koneoppimisratkaisuja, jotka on räätälöity omiin erityistarpeisiisi. Onnea!